`
https://leetcode.cn/problems/group-anagrams/
`

/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function (strs) {
  // 编码到分组的映射
  const codeToGroup = new Map();
  for (const s of strs) {
    // 对字符串进行编码
    // 相同的字母异位词的编码是一样的
    const code = encode(s);
    // 把编码相同的字符串放在一起
    if (!codeToGroup.has(code)) {
      codeToGroup.set(code, []);
    }
    codeToGroup.get(code).push(s);
  }

  // 获取结果
  const res = [];
  for (let group of codeToGroup.values()) {
    res.push(group);
  }

  return res;
};

// 利用每个字符的出现次数进行编码
function encode(s) {
  const count = new Array(26).fill(0)
  for (let c of s) {
    let delta = c.charCodeAt() - 'a'.charCodeAt()
    count[delta]++
  }
  return count.toString()
}